Copyright (c) 1999 Massachusetts Institute of Technology

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, see https://gnu.org/licenses or write
to:
  Free Software Foundation, Inc.
  51 Franklin Street, Fifth Floor
  Boston, MA 02110-1301
  USA
------------------------------

ITS TTY Variables:

     This file attempts to maintain up-to-date documentation on all
the TTY variables.  Those wonderful souls who update this information
in anyway (additions, deletions, corrections) should describe their
modifications in a brief note to INFO-ITS so that interested parties
can correct their copies or conceptions without needing to print or read
the entire file again.  For example:

:MAIL INFO-ITS I added documentation on the FOO variable to TTYVAR.^C
----------------------------------------------------------------------

     For a more complete description of TTY handling see the file
.INFO.;ITS TTY.  This file exists primarily to facilitate lookup via
the DOC program.  Use :DOC TTYVAR <name> to read the documentation
of a specific variable.

     The system calls for reading and setting TTY variables are:
CNSGET, CNSSET, OPEN, RCPOS, RFNAME, RSSIZE, SCML, SCPOS, STYGET,
TTYGET, TTYSET, and TTYVAR.

BIT names:

     Bit names begin with %Tx where x specifies which variable.  Byte
pointer names begin with $Tx.  Here is a list of the prefixs in use
and where they're found:

%TA	TTYSTA
%TB	.TTY
%TC	TTYCOM
%TD	output buffers (these are characters, not bits)
%TF	?
%TG	TTYST1 and TTYST2
%TI	IOCHNM (for input channels)
%TJ	IOCHNM (for output channels)
%TN	TCTYP (these are codes, not bits)
%TO	TTYOPT LH
%TP	TTYOPT RH
%TS	TTYSTS
%TT	TTYTYP LH
%TX	input buffers
%TY	TTYTYP RH

HEIGHT:	Screen Height (per-TTY)

     HEIGHT contains the number of lines on the screen.  For printing
terminals it is usually some large number.

     This variable can be read with the CNSGET, RSSIZE, and TTYVAR system
calls and set with the CNSSET and TTYVAR system calls.

IDLTIM:	Idle Time (per-TTY)

     IDLTIM contains the length of time since the last input character
character was typed on the TTY, in 30'ths of a second. 

     This variable can be read with the TTYVAR system call.

IOCHNM:	I/O channel bits (per-channel)

     Some of the control bits set first time options and some are per-channel.
Those which are per-channel are marked below with a *.  The standard names
for these bits are also given.

Control bits on input:
	2.6 *	%TIECH	Read even if char needs pi echoing
	2.5 *	%TIPEK	Don't remove char from buffer (peek)
	2.3 *	%TIACT	Don't wait for activation char
	2.2 *	%TIINT	Read even if char is an interrupt
			char and hasn't interrupted yet.
	2.1 *	%TINWT	Do not wait for input.  If no input is
			available, return -1 in unit mode, or
			return a partially filled block in block mode.
	1.9 *	%TIFUL	Use the full TV character set if possible.
			In this mode, characters have this form:
			2.3	%TXTOP	Top.
			2.2	Obsolete.  Used to be Shift lock.
			2.1	%TXSUP	Super.  Used to be Shift.
			1.9	%TXMTA	Meta.
			1.8	%TXCTL	Control.
			1.7-1.1	%TXASC	Ascii part of character.
			Of course, for non-TV's only %TXASC
			will be non-zero.
	1.6	Set up 3 line echo area (like SCML of 3).
	1.4	"DDT" mode.  Initially clear the %TGPIE and
		%TGMPE bits for carriage return, line feed,
		and tab, thus causing them not to echo.
	1.3	Image mode.  Initially clear the %TGPIE
		and %TGMPE bits for all characters.
	1.2	0 = unit mode, 1 = block mode.  In block mode,
		^C causes a block mode end of file.
	1.1	0 = input.

Control bits on output:

	2.6 *	%TJECH	Echo mode output.
	2.5 *	%TJCTN	Don't do line continuation.
	2.4 *	%TJSTP	Channel is hung in **MORE**.
		Unusual in that the system modifies this bit.
	2.3 *	%TJDIS	Recognize ^P cursor codes.
	2.2 *	%TJSIO	Super-image output.  No padding
			or cursor control is performed.
	2.1 *	%TJMOR	Do not do **MORE** processing.
	1.9 *	%TJPP2	Output in the echo area if it exists.
	1.6	Same as 2.2 - turns on %TJSIO.
	1.5	Same as 2.3 - turns on %TJDIS.
	1.4	Turns on %TJECH, %TJPP2, %TJMOR.
	1.3	Image mode.  Initially set %TGIMG bits
		for all characters.
	1.2	0 = unit mode, 1 = block mode.  In block mode
		output all ^C's are ignored.
	1.1	1 = output.

     The I/O channel word for a TTY channel can be read with RFNAME.  It
is set by the OPEN call.

ISPEED:	Input Speed (per-TTY)

     ISPEED is the input speed of the terminal.  It refers to the input
speed code stored in the TTYTYP variable.  However, it is not a speed
code, but rather the speed in bits per second.  Also, you are allowed to
set the ISPEED variable, while you are not allowed to set the whole TTYTYP
variable.

     This variable can be read and set with the TTYVAR system call.

OSPEED:	Output Speed (per-TTY)

     OSPEED is the output speed of the terminal.  It refers to the output
speed code stored in the TTYTYP variable.  However, it is not a speed
code, but rather the speed in bits per second.  Also, you are allowed to
set the OSPEED variable, while you are not allowed to set the whole TTYTYP
variable.

     This variable can be read and set with the TTYVAR system call.

TCTYP:	Terminal type code (per-TTY)

	0	%TNPRT	Printing terminal.
	1	%TNDP	Good Datapoint.
	2	%TNODP	Bad Datapoint ("loser").
	3	%TNIML	Imlac.
	4	%TNTEK	Tektronix.
	5	%TNTV	PDP-11 TV.
	6	%TNMEM	Memowreck.
	7	%TNSFW	Software terminal (accepts internal
			ITS display codes, such as live in
			internal terminal output buffers;
			see ITS TTY for details).
	10	%TNTRM	Terminet.
	11	%TNESC	Display using ASCII standard display codes.
	12	%TNDTM	Datamedia.
	13	%TNRAY	Teleray 1061
	14	%TNHDS	Concept 100
	15	%TNH19	Zenith H19
	16	%TNAAA	Ann Arbor Ambassador

     This variable can be read with the CNSGET and TTYVAR system calls
and set with the CNSSET and TTYVAR system calls.

TTYCOM:	Com-link bits (per-TTY)

	4.9		Communicate mode.
	4.8	%TCLFT	Local feed through (my job sees his typing).
	4.7	%TCRFT	Remote feed through (his job sees my typing).
	4.6	%TCICO	Input comm override (my job sees my typing).
	4.5	%TCOCO	Output comm override (I see my job's typing).
	4.4	%TCRFS	Refuse comm messages.
	4.3	%TCQRY	Query me if comm attempted to me.
	4.2	%TCMTR	The tty's motor is off, and must be
			turned on before next output.
			(Currently only Terminets get turned off.)
	4.1	%TCECH	The last output to this tty was PI echo.
	3.9	%TCINP	Someone waited for input since last home-up.
	3.8	%TCDET	Console's tree detached by top level interrupt.
	3.7	%TCDNG	Type bell (input buffer full).
	3.6	%TCCBK	Reading uname or tty number after ^_K.
	3.5	%TCCBS	Reading uname or tty number after ^_S.
	3.4	%TCFPD	First part of an output code sequence is done.
	3.3	%TCTPN	Type ^_N on leaving comm (unless user types it).
	3.2	%TCPAD	0 => padding necessary on datapoint.
	3.1	%TCHNG	Done flag seems to be fried - time out quickly.
	2.9-1.1	-1 if not in comm mode; otherwise number of
		next tty in circular list of those in comm mode
		together.

Only the %TCICO, %TCOCO, %TCRFS, %TCQRY, %TCMTR, and %TCINP bits may
be set.

     This variable can be read with the CNSGET and TTYVAR system calls
and set with the CNSSET and TTYVAR system calls.

TTYOPT:	TTY capability and option bits (per-TTY)

	4.8	%TOALT	Standardize altmodes.
	4.7	%TOCLC	Convert lower case input to upper case.
	4.6	%TOERS	This tty can selectively erase.
	4.5	%TOHDX	This tty is half-duplex.
	4.4	%TOMVB	This tty can backspace directly.
	4.3	%TOSAI	This tty handles SAIL characters.
	4.2	%TOSA1	Used to initialize %TSSAI for new jobs.
	4.1	%TOOVR	This tty can overprint correctly.
	3.9	%TOMVU	This tty can move its cursor upward.
	3.8	%TOMOR	Used to initialize %TSMOR for new jobs.
	3.7	%TOROL	Used to initialize %TSROL for new jobs.
	3.6	%TORAW	Don't optimize cursor motion.
	3.5	%TOLWR	This tty has a lower case keyboard.
	3.4	%TOFCI	This tty's keyboard has the full TV character set.
	3.3	%TOIML	This tty acts like an IMLAC.
	3.2	%TOLID	This tty can insert/delete lines.
	3.1	%TOCID	This tty can insert/delete characters.
	2.9-2.7	$TPPLF	How to pad line feeds:
			0	Don't.
			1	Two pad chars (Memorex, 2741).
			2	Terminet.
	2.6-2.4	$TPPCR	How to pad carriage returns:
			0	Don't.		4	Execuport.
			1	Normal.		5	2741.
			2	Double.		6	Memorex.
			3	Unused.		7	Unused.
			For a Datapoint, number of pad chars before
			each string of cursor motion commands.
			For a Terminet, 0=no padding, 1,2,3,4,5
			correspond to 10,15,30,60,120 cps.
	2.3-2.1	$TPPTB	How to pad tabs:
			0	Tabs not allowed.
			<n>	Use <n-1> pad chars.
			On displays,
			0	don't use tabs.
			1	use tabs.
			2	use VT52-style absolute positioning.
	1.9	%TPMTA  Treat bit 1.8 of input characters as the meta bit.
			this is for terminals such as Telerays which have Edit keys.
	1.8	%TPPRN	interchange ( with [, and ) with ], on input.
	1.7	%TPTEL	Treat CRLF input as CR for TELNET protocol.
	1.6	%TPCBS	The ^\ intelligent terminal protocol is enabled.
	1.5	%TP11T	PDP-11 TV.  Reflects %TY11T.
	1.4	%TPORS	Output reset really does something.
	1.3	%TPRSC	This tty can do region scrolling.
	1.2	%TPIBC	Oddball 2741-like tty.	;no longer defined
	1.1	%TPIBM	It really is a 2741.	;no longer defined

     This variable can be read with the CNSGET and TTYVAR system calls
and set with the CNSSET and TTYVAR system calls.

TTYROL:	Scroll count (per-TTY)

     TTYROL contains the number of lines the TTY moves up when it scrolls.
Scrolling occurs when a LF is sent while the cursor is on the last line.

     This variable can be read and set with the TTYVAR system call.

TTYSTA:	?

	4.9	%TACFM	Tty does not need a console free message
			eventually (hasn't been in use since
			the last one).
	4.8	%TAC.Z  Tty is being ^Z'd.  Shouldn't be on with
			%TACFM.  If %TACFM and %TAC.Z are both 0,
			the tty is being freed and a console free
			message is immanent.
	4.7	%TANJS	This ^Z is being flushed because no job
			slots are available.  If set, %TAC.Z
			will be 1 and %TACFM will be 0.
	4.6-4.3	%TANEC	Number of following chars to inhibit echo and ints for.
			This is used for the arg chars that follow Top-E,
			Top-S, Top-Y, etc.

     This variable can be read with the STYGET system call.

TTYST1:	Activation and Echo control word 1 (per-job)

This variable contains six groups of six bits.
Each group is as follows:
	1.6	%TGMPE	Echo at main program level (when IOT'ed).
	1.5	%TGPIE	Echo at interrupt level (when typed).
	1.4	%TGIMG	Echo in image mode.
	1.3	%TGSPC	Special hack: convert lower case to upper.
	1.2	%TGACT	Activation character.
	1.1	%TGINT	Interrupt character.

The character groups are:
	4.9-4.4		^@-^F ^K ^L ^N-^R ^T-^Z ^\-^_
	4.3-3.7		Upper and lower case letters.
	3.6-3.1		Digits.
	2.9-2.4		! " # $ % & ' , . : ; ? @ \ ` | ~
	2.3-1.7		+ * - / = ^ _
	1.6-1.1		< > ( ) [ ] { }

     This variable can be read with the TTYGET system call and set
with the TTYSET system call.

TTYST2:	Activation and Echo control word 2 (per-job)

This variable contains six more groups of six bits.
Each group is as follows:
	1.6	%TGMPE	Echo at main program level (when IOT'ed).
	1.5	%TGPIE	Echo at interrupt level (when typed).
	1.4	%TGIMG	Echo in image mode.
	1.3	%TGSPC	Special hack: convert lower case to upper.
	1.2	%TGACT	Activation character.
	1.1	%TGINT	Interrupt character.

The character groups are:
	4.9-4.4		^G ^S
	4.3-3.7		^I ^J  (tab, linefeed)
	3.6-3.1		altmode  (33)
	2.9-2.4		^M  (carriage return)
	2.3-1.7		rubout  (177)
	1.6-1.1		space, ^H  (backspace)

     This variable can be read with the TTYGET system call and set
with the TTYSET system call.

TTYSTS:	TTY option bits (per-job)

	4.9	%TSFRE	Free console (not in use).
	4.8	%TSCLE	^L should echo as "^L" (normally
			clears screen on displays).
	4.7	%TSHDX	Same as %TOHDX.  Vestigial.
	4.6	%TSFCO	Use full 12-bit TV char set for output
			and echoing; echo META as BETA; echo
			CONTROL as ALPHA.
	4.5	%TSALT	Do not standardize altmodes.
	4.4	%TSROL	Scroll mode.
	4.3	%TSSAI	Echo and ascii output use SAIL
			character set.
	4.2	%TSACT	Next input IOT shouldn't wait
			for an activation character.
	4.1	%TSNEA	Don't echo in echo area; echo in M.P. Area.
	3.9	%TSINT	Next input character should
			interrupt even if it ordinarily
			would not (%TGINT = 0).
	3.8	%TSMOR	Inhibit **MORE** processing.
	3.7	%TSATY	Set whenever an .ATTY executed by
			some superior returns the tty to
			the job.
	3.4	%TSNOE	Defer echoing.
	3.3	%TSLCZ	Last character typed was ^Z.
			This bit causes .ATTY's to fail.
	3.2	%TSSII	Super-image input.  The special
			actions of ^Z and ^_ are suppressed.
	3.1	%TSCNS	This is a console, not a device.
	2.9-1.1	The user index of the job which controls
		the tty, or -1 if the tty is free.

%TSFRE, %TSHDX, %TSLCZ, %TSCNS, and the RH may not be altered.

     This variable can be read with the TTYGET system call and set
with the TTYSET system call.

TTYTYP:	Semi-permanent stuff (per-TTY)

This variable may not be set, just read (but see ISPEED and OSPEED).

	4.9	%TTLCL	Local tty (i.e. right near the PDP-10).
	4.8	%TT340	Near the 340 or a 340 slave.
	4.7	%TT3HP	High priority for grabbing 340.
	4.3	%TTPAR	Tty needs a parity bit generated by software.
	4.2	%TTDDI	Don't ding bell on excess input.
	4.1	%TTIBM	Datel (2741) line.
	3.8-3.5	$TTISP	Input speed code:
		0 = unknown		6 = 1800 baud		13 = 40K baud
		1 = 600 baud		7 = 2400 baud		14 = 50K baud
		2 = 110 baud	       10 = 4800 baud		15 = 80K baud
		3 = 150 baud	       11 = 9600 baud		16 unused
		4 = 300 baud	       12 = 25K baud		17 unused
		5 = 1200 baud
	3.4-3.1	$TTOSP	Output speed code, as above.
	2.9	%TYDPK	Datapoint controller line.
	2.8	%TYSTY	Alter ego to a STY.
	2.7	%TYNVA	Nova tty (requiescat in pace).
	2.6	%TYMTY	Morton controller line.
	2.5	%TYDIL	Dial-up line.
	2.4	%TY11T	PDP-11 TV tty.
	2.3	%TYDL	DL-10 tty.
	2.2	%TYOTY	KA-10 console tty.
	2.1	%TYETY	DTE-20 tty.
	1.9	%TYNTY	TK-10 tty.
	1.8	%TYMDM	Dial-up line with modem control.
	1.7	%TYKST	KS-10 console tty.
	1.6	%TYDZT	DZ-11 tty on a KS-10.
	1.5	%TYRLM	ROLM data switch tty.

     This variable can be read with the CNSGET and TTYVAR system calls.

WIDTH:	Screen width (per-TTY)

     WIDTH contains the no. of usable print positions on a line for the
TTY.  It is usually one or two less than the actual no. of columns to allow
room for a "!" in the last column to indicate typeout being continued on
the next line (two columns are required when the terminal loses by
automatically performing a CRLF operation when a character is output to
the last column).

     This variable can be read with the CNSGET, RSSIZE and TTYVAR system
calls and set with the CNSSET and TTYVAR system calls.
